package com.ash.test.json;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * 存储职能型组织信息
 * </p>
 *
 * @author linwp
 * @since 2020-07-23
 */
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class FunctionalOrgDTO extends BaseOrganizationDTO implements Serializable {

    private static final long serialVersionUID = 2689140262100351030L;
    /**
     * 组织编码
     */

    private String organizationCode;

    /**
     * 组织名称
     */

    private String organizationName;

    /**
     * 组织描述
     */

    private String organizationDesc;
    /**
     * 英文组织名称
     */

    private String organizationNameEnglish;

    /**
     * 英文组织描述
     */

    private String organizationDescEnglish;

    /**
     * 国别中文名称
     */

    private String countryName;

    /**
     * 国别英文名称
     */

    private String countryEnName;

    /**
     * 组织类型：1：集团  2:公司  3：部门 4事业部
     */

    private Integer organizationType;
    /**
     * 0-不是助理团  1-是助理团
     */

    private Integer assistantFlag;
    /**
     * 组织类型：1：集团  2:公司  3：部门 4事业部
     */

    private List<Integer> organizationTypes;

    /**
     * 地区
     */

    private String area;

    /**
     * 地址
     */

    private String address;

    /**
     * 营业执照
     */

    private String licenseCode;

    /**
     * 法人代表
     */

    private String legalRepresentative;

    /**
     * 电话
     */

    private String phone;

    /**
     * 邮箱
     */

    private String email;

    /**
     * 规模
     */

    private Integer scale;

    /**
     * 成立时间
     */

    private LocalDate regTime;

    /**
     * 行业
     */

    private String industry;

    /**
     * 介绍
     */

    private String introduce;

    /**
     * 主营业务
     */

    private String business;

    /**
     * 主营业务 英文
     */
    private String businessEnglish;
    /**
     * 备注
     */

    private String remark;

    /**
     * 状态: 1,启用 0,禁用
     */

    private Integer status;

    /**
     * 编制人数
     */

    private Integer planNum;


    private Integer underPlanNum;

    /**
     * 直属部門數
     */

    private Integer directDepartmentNum;

    /**
     * 下属部門數
     */

    private Integer underDepartmentNumber;


    private Integer underCompanyNumber;

    /**
     * 租户编号
     */

    private String tenantCode;


    private List<String> tenantCodeList;

    /**
     * 创建时间
     */

    private LocalDateTime createTime;

    /**
     * 创建人
     */

    private String createUser;

    /**
     * 更新时间
     */

    private LocalDateTime updateTime;

    /**
     * 更新人
     */

    private String updateUser;

    /**
     * 删除状态，1：已删除，0：未删除
     */

    private Integer deleteFlag;
    /**
     * 是否统计员工个数
     */

    private Integer countEmployeeNumFlag;
    /**
     * 是否获取员工列表
     */

    private Integer getEmployeeFlag;

    /**
     * 直属员工数
     */

    private Integer employeeNum;


    private Long administrativeEmployeeNum;

    /**
     * 主岗员工数量
     */

    private Integer mainDutyEmployeeNum;

    /**
     * 兼任员工数量
     */

    private Integer partTimeEmployeeNum;

    /**
     * 下属员工数
     */

    private Integer allEmployeeNum;

    /**
     * 下属员工数包含直属和及其下属所有员工
     */

    private Integer underEmployeeNum;

    /**
     * 岗位编码
     */

    private String dutyCode;

    /**
     * 员工名稱
     */

    private String employeeName;

    /**
     * 岗位名称
     */

    private String dutyAlias;

    /**
     * 岗位类型
     */
    private Integer dutyType;

    /**
     * 岗位名搜索
     */

    private String dutyAliasLike;


    private String dutyAliasEnglish;

    /**
     * 岗位编码列表
     */

    private List<String> dutyCodes;
    /**
     * 是否主管岗位
     */

    private Integer leaderPositionFlag;

    /**
     * 公司数
     */

    private Integer companyNumber;

    /**
     * 集团总数
     */

    private Integer companyGroupNum;




    /**
     * 组织编码
     */

    private List<String> organizationCodes;
    /**
     * 根据机构编码获取某个机构下的所有子集
     */

    private String getChildByOrganizationCode;

    /**
     * 组织编码  不等于
     */

    private String neOrganizationCode;
    /**
     * 职位编码
     */

    private String positionCode;
    /**
     * 职位编码
     */

    private List<String> positionCodes;
    /**
     * 不等于  员工编码
     */

    private String neEmployeeCode;

    /**
     * 父级路径模糊查询
     */

    private String parentOrganizationPathLike;


    private Integer sort;


    private String orgSort;


    private BigDecimal addSort;

    /**
     * 路径
     */

    private String organizationPath;

    /**
     * 路径模糊查询
     */
    private String organizationPathLike;

    /**
     * 状态：1正式 2 兼任 3 待入职 4 试用 5 待离职 6 已离职
     */

    private List<Integer> serviceStatus;


    private String postalcode;

    /**
     * 页码
     */

    private int pageNo;

    /**
     * 每页记录数
     */

    private int pageSize;
    /**
     * 排序类型  1：按主管员工排序
     */

    private Integer orderType;

    /**
     * 官网地址
     */

    private String websiteAddress;


    /**
     * 上级组织编码
     */
    private String parentOrganizationCode;

    /**
     * 上级组织名称
     */
    private String parentOrganizationName;

    /**
     * 国家编码
     */

    private String countryCode;


    private String countryNameCode;


    private String provinceCode;


    private String cityCode;


    private String regionCode;

    /**
     * 关联组织编码
     */
    private Set<String> relateOrganizationCodes;

    private Integer showChildDutyFlag;

    /**
     * 是否查询关联机构
     */

    private Integer showRelateFlag;
    /**
     * 是否查询主管人员头像
     */

    private Integer leaderImgFlag;

    /**
     * 审核状态列表 1,通过, 0,未通过
     */

    private List<Integer> auditStatuses;
    /**
     * 版本状态列表 0,待生效, 1,生效
     */

    private List<Integer> versionStatuses;







    /**
     * 模糊查询某个机构下及它自己的机构
     */
    private String parentOrgPathListHasSelf;
    /**
     * 机构名+主管名查询
     */
    private String nameLike;


    private List<Integer> queryStatuses;

    /**
     * 是否只是查询当前公司下员工(不包含公司下部门包含公司的场景)
     */

    private Boolean queryCurrentCompanyEmployee;

    /**
     * 颜色编码
     */

    private String colorCode;

    /**
     * 本组织员工列表（不包含下级组织的员工）
     */



    /**
     * 机构主管岗位编码
     */

    private String leaderDutyCode;

    /**
     * 机构主管岗位名称
     */

    private String leaderDutyAlias;

    /**
     * 主管岗位审批状态
     */

    private Integer leaderDutyAuditStatus;

    /**
     * 岗位调整参数（批量）
     */


    private String currencyCode;

    /**
     * 货币文本
     */

    private String currencyText;

    /**
     * 源路径，用于批量处理前后路径关系维护
     */
    private String originPath;

    /**
     * 是否需要查询权限标识
     */

    private Integer dutyPermissionFlag;

    /**
     * 员工所属行政机构code
     */

    private String administrativeOrganizationCode;


    private Boolean levelOneFlag;



    private String rawData;


    private Integer viewSort;


    private Boolean companyDetailNeedGroupEmployeeNum;


    private Integer includeSelf;



    private Integer dutyStatus;


    private Integer groupFlag;

    private GroupInfoVO groupInfoVO;


    private String fullPathName;





    public int getPageNo() {
        return pageNo < 1 ? 1 : pageNo;
    }

    public int getPageSize() {
        return pageSize < 1 ? 10 : pageSize;
    }


}
